<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 回调函数 将A函数作为B函数的参数来传递 并且B函数中将A函数调用起来

        // 1、js没有数据类型的约束 可以传递任意的数据
        function fn(a){
            console.log(a)
        }
        fn(10)
        fn("字符串")
        // 创建数组 本质就是在堆区开辟了空间 arr在保存空间地址
        // 等价于 let arr = 0X222
        let arr = [1,2,3];
        // 函数调用 可以传递内存地址
        fn(arr);
        // 等价于  let fn2 = 0X333;
        let fn2 = function(){
            console.log('回调函数')
        }
        // 将fn2这个函数传递给了fn使用
        fn(fn2);

        let func = function(cb){
            cb();
        }
        func(fn2);
        // 简化写法


        let func2 = function(cb){
            cb();
        }

        func2(function(){
            console.log('回调函数的调用')
        })

        // 回调时携带参数

        let func3 = function(cb){
            let arr = [1,2,3];
            cb(arr);
        }

        func3(function(arr){
            console.log('使用回调携带过来的参数')
            console.log(arr)
        })
        // 回调函数的使用场景在于当自己封装函数的时候 如果某一个小功能无法确定 就使用回调函数将不确定的功能交给使用者来决定


    </script>
</body>
</html>